package cn.magicduck.demo;


import cn.magicduck.demo.ceiling.LevelOneCeiling;
import cn.magicduck.demo.ceiling.LevelTwoCeiling;
import cn.magicduck.demo.coat.DuluxCoat;
import cn.magicduck.demo.coat.LiBangCoat;
import cn.magicduck.demo.floor.ShengXiangFloor;
import cn.magicduck.demo.tile.DongPengTile;
import cn.magicduck.demo.tile.MarcoPoloTile;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

/**
 * @projectName: design-pattern-demo
 * @className: DecorationPackageController
 * @description: 装饰包装控制器
 * @author: MagicDuck
 * @create: 2020-07-21 10:16
 **/
public class DecorationPackageController {

    public String getMatterList(BigDecimal area, Integer level) {

        /** 装修清单 */
        List<Matter> list = new ArrayList<Matter>();
        /** 装修价格 */
        BigDecimal price = BigDecimal.ZERO;

        // 豪华欧式 [吊顶，二级顶] [涂料，多乐士] [地板，圣象]
        if (1 == level) {

            LevelTwoCeiling levelTwoCeiling = new LevelTwoCeiling();
            DuluxCoat duluxCoat = new DuluxCoat();
            ShengXiangFloor shengXiangFloor = new ShengXiangFloor();

            list.add(levelTwoCeiling);
            list.add(duluxCoat);
            list.add(shengXiangFloor);

            price = price.add(area.multiply(new BigDecimal("0.2")).multiply(levelTwoCeiling.price()));
            price = price.add(area.multiply(new BigDecimal("1.4")).multiply(duluxCoat.price()));
            price = price.add(area.multiply(shengXiangFloor.price()));

        }

        // 轻奢田园 [吊顶，二级顶] [涂料，立邦] [地砖，马可波罗]
        if (2 == level) {
            LevelTwoCeiling levelTwoCeiling = new LevelTwoCeiling();
            LiBangCoat liBangCoat = new LiBangCoat();
            MarcoPoloTile marcoPoloTile = new MarcoPoloTile();

            list.add(levelTwoCeiling);
            list.add(liBangCoat);
            list.add(marcoPoloTile);

            price = price.add(area.multiply(new BigDecimal("0.2")).multiply(levelTwoCeiling.price()));
            price = price.add(area.multiply(new BigDecimal("1.4")).multiply(liBangCoat.price()));
            price = price.add(area.multiply(marcoPoloTile.price()));

        }

        // 现代简约 [吊顶，二级顶] [涂料，立邦] [地砖，东鹏]
        if (3 == level) {

            LevelOneCeiling levelOneCeiling = new LevelOneCeiling();
            LiBangCoat liBangCoat = new LiBangCoat();
            DongPengTile dongPengTile = new DongPengTile();

            list.add(levelOneCeiling);
            list.add(liBangCoat);
            list.add(dongPengTile);

            price = price.add(area.multiply(new BigDecimal("0.2")).multiply(levelOneCeiling.price()));
            price = price.add(area.multiply(new BigDecimal("1.4")).multiply(liBangCoat.price()));
            price = price.add(area.multiply(dongPengTile.price()));
        }

        StringBuilder detail = new StringBuilder("\r\n-------------------------------------------------------\r\n" +
                "装修清单" + "\r\n" +
                "套餐等级：" + level + "\r\n" +
                "套餐价格：" + price.setScale(2, BigDecimal.ROUND_HALF_UP) + " 元\r\n" +
                "房屋面积：" + area.doubleValue() + " 平米\r\n" +
                "材料清单：\r\n");

        for (Matter matter: list) {
            detail.append(matter.scene()).append("：").append(matter.brand()).append("、").append(matter.model()).append("、平米价格：").append(matter.price()).append(" 元。\n");
        }

        return detail.toString();
    }
}
